package features.advance.leetcode.tree.easy;

import features.advance.leetcode.tree.model.TreeNode;
import features.advance.leetcode.util.TreeUtil;

/**
 *
 *  101. 对称二叉树
 * 给定一个二叉树，检查它是否是镜像对称的。
 *
 *
 *
 * 例如，二叉树 [1,2,2,3,4,4,3] 是对称的。
 *
 *     1
 *    / \
 *   2   2
 *  / \ / \
 * 3  4 4  3
 *
 *
 * 但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:
 *
 *     1
 *    / \
 *   2   2
 *    \   \
 *    3    3
 *
 *
 * 进阶：
 *
 * 你可以运用递归和迭代两种方法解决这个问题吗？
 *
 * @author LIN
 * @date 2021-04-21
 *
 */
public class Solution101 {
    public boolean isSymmetric(TreeNode root) {
        return check(root,root);
    }

    private boolean check(TreeNode p, TreeNode q){
        if (p == null && q == null) {
            return true;
        }
        if (p == null || q == null) {
            return false;
        }

        return p.val==q.val && check(p.left,q.right) && check(p.right,q.left);
    }

    public static void main(String[] args) {

        String str = "[1,2,2,3,4,4,3]";
        TreeNode treeNode = TreeUtil.parseArray(str);
        Solution101 solution101 = new Solution101() {
        };

        boolean symmetric = solution101.isSymmetric(treeNode);
        System.out.println(symmetric);
    }

}
